#include "Button.h"

Button::Button( int x, int y, int w, int h )
{
    //设置按钮的属性
    box.x = x;
    box.y = y;
    box.w = w;
    box.h = h;

    buttonOut = NULL;
    buttonOver = NULL;
    buttonDown = NULL;
    buttonUp = NULL;
    buttonNowStatus = &buttonOut;
}


void Button::handle_events(SDL_Event event)
{
    //鼠标坐标
    int x = 0, y = 0;
    
    //如果鼠标发生了移动
    if( event.type == SDL_MOUSEMOTION )
    {
        //获得鼠标坐标
        x = event.motion.x;
        y = event.motion.y;
        
        //如果鼠标在按钮上方
        if( ( x > box.x ) && ( x < box.x + box.w ) && ( y > box.y ) && ( y < box.y + box.h ) )
        {
            //设置按钮子图
            buttonNowStatus = &buttonOver;    
        }
        //如果不是
        else
        {
            //设置按钮子图
            buttonNowStatus = &buttonOut;    
        }    
    }
    //如果一个鼠标按钮被按下了
    if( event.type == SDL_MOUSEBUTTONDOWN )
    {
        //如果鼠标左键被按下了
        if( event.button.button == SDL_BUTTON_LEFT )
        {
            //获取鼠标坐标
            x = event.button.x;
            y = event.button.y;
        
            //如果鼠标在按钮上方
            if( ( x > box.x ) && ( x < box.x + box.w ) && ( y > box.y ) && ( y < box.y + box.h ) )
            {
                //设置按钮子图
                buttonNowStatus = &buttonDown;    
            }
        }
    }

    //如果一个鼠标按钮被释放了
    if( event.type == SDL_MOUSEBUTTONUP )
    {
        //如果鼠标左键被释放了
        if( event.button.button == SDL_BUTTON_LEFT )
        { 
            //获取鼠标坐标
            x = event.button.x;
            y = event.button.y;
        
            //如果鼠标在按钮上方
            if( ( x > box.x ) && ( x < box.x + box.w ) && ( y > box.y ) && ( y < box.y + box.h ) )
            {
                //设置按钮子图
                buttonNowStatus = &buttonUp;    
            }
        }
    }
}


void Button::show(SDL_Surface* screen)
{
    SDL_Rect offset;
    offset.x = box.x;
    offset.y = box.y;
    offset.w = box.w;
    offset.h = box.h;

    SDL_BlitSurface( *buttonNowStatus, NULL, screen, &offset );
}

/**
 * @brief 设置背景图
 * 
 * @param buttonOut ： 设置背景图的指针
 */
void Button::setOutImage(SDL_Surface *buttonOut)
{
    this->buttonOut = buttonOut;
}



/**
 * @brief 设置背景图
 * 
 * @param buttonOver ： 设置背景图的指针
 */
void Button::setOverImage(SDL_Surface *buttonOver)
{
    this->buttonOver = buttonOver;
}



/**
 * @brief 设置背景图
 * 
 * @param buttonDown ： 设置背景图的指针
 */
void Button::setDownImage(SDL_Surface *buttonDown)
{
    this->buttonDown = buttonDown;
}



/**
 * @brief 设置背景图
 * 
 * @param buttonUp ： 设置背景图的指针
 */
void Button::setUpImage(SDL_Surface *buttonUp)
{
    this->buttonUp = buttonUp;
}